/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package beans;

/**
 *
 * @author Tavo
 */


import dao.ExamenDAO;
import entity.Examen;
import entity.Inciso;
import entity.Usuario;
//import java.awt.event.ActionEvent;
import java.io.IOException;
import negocio.BeanOrdenarPregunta;
import java.io.Serializable;
import java.util.*;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import javax.faces.event.ActionEvent;
import javax.servlet.http.HttpServletRequest;

import negocio.BeanPregunta;

public class BeanExamen implements Serializable
{


    private String idUsuario;
    private String fechaInicio;
    private String fechaFin;
    private int erroneas;
    private int aciertos;



    private String textoPregunta;
    private String imagenCodigo;
    private List<SelectItem> itemOpciones;
    private List<String> itemSeleccionados;

    

    private List<BeanPregunta> preguntas;
    private List<Integer> respuestaCorrecta;
    private List<Integer> arrayAleatorio;
    
    private int calificacion;
    private Calendar feInicio,feTermino;

    public int getCalificacion() {
        return calificacion;
    }

    public void setCalificacion(int calificacion) {
        this.calificacion = calificacion;
    }


    BeanOrdenarPregunta obj;
    
    HttpServletRequest request;
    public BeanExamen()
    {
        request=(HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
        
        int idtema=Integer.parseInt(request.getAttribute("idTema").toString());
        obj=new BeanOrdenarPregunta(idtema);

        preguntas=new ArrayList<BeanPregunta>();
        preguntas=obj.getListPreguntas();

        arrayAleatorio=new ArrayList<Integer>();
        arrayAleatorio=obj.getListPreguntasAleatorio();

        itemOpciones=new ArrayList<SelectItem>();
        itemSeleccionados=new ArrayList<String>();

        respuestaCorrecta=new ArrayList<Integer>();

         siguientePregunta();

         horaInicio();
    }

    public List<BeanPregunta> getPreguntas() {
        return preguntas;
    }

    public void setPreguntas(List<BeanPregunta> preguntas) {
        this.preguntas = preguntas;
    }

    int index=0;
    boolean t=false;
    BeanPregunta pre;
    public void siguientePregunta()
    {
        if(index<preguntas.size())
        {

            if(t==false)
            {
                pre=preguntas.get(arrayAleatorio.get(index));
                obtenerDatos(pre);
                t=true;
            }
            else
            {

            mandar(pre);

            t=false;
            Calificar();
            index++;
            siguientePregunta();
            }
        }
        else
        {
            index=preguntas.size()-1;
        }
    }

    public void previaPregunta()
    {
        --index;
        if(index<0){index=0;}

        if(index>-1)
        {
            mandar(pre);

                pre=preguntas.get(arrayAleatorio.get(index));
                obtenerDatos(pre);
        }
    }

    String clave2="*";
    public void terminarExamen(ActionEvent ev)
    {
     this.clave2= ev.getComponent().getAttributes().get("nombreAtributo1").toString();
     System.out.println("************************"+clave2+"************************");
      
      fin();

      //String ancla = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("ancla");
      try
      {
          FacesContext.getCurrentInstance().getExternalContext().redirect("Resumen.jsp");
      }
      catch (IOException e)
      {
          e.printStackTrace();
      }

    }

    public String fin()
    {
        Calificar();
        horaTermino();
        Calificacion();

        guardarExamen();


        return "irResumen";
    }

    public void guardarExamen()
    {
                
   
        Usuario usuario=new Usuario();
        usuario.setIdUsuario(this.clave2);

        Examen examen=new Examen();

        examen.setCalificacion(calificacion);
        examen.setFechaRealizacion(this.feInicio);
        examen.setFechaTermino(this.feTermino);

        examen.setIdUsuarioEntity(usuario);

        ExamenDAO dao=new ExamenDAO();
        dao.guardaExamen(examen, usuario);
    }

    public void horaInicio()
    {

        Calendar cal=new GregorianCalendar();


        this.fechaInicio=""+cal.get(Calendar.HOUR)+":"+cal.get(Calendar.MINUTE)+":"+cal.get(Calendar.SECOND);
        this.feInicio=cal;
    }

    public void horaTermino()
    {
        Calendar cal=new GregorianCalendar();
        this.fechaTermino=""+cal.get(Calendar.HOUR)+":"+cal.get(Calendar.MINUTE)+":"+cal.get(Calendar.SECOND);
        this.feTermino=cal;
    }

    
    public void obtenerDatos(BeanPregunta pre)
    {
        
        
        this.textoPregunta=pre.getTextoPregunta();

        this.itemOpciones=pre.getIncisos();

        this.respuestaCorrecta=pre.getIncisosCorrectos();

        this.itemSeleccionados=pre.getIdIncisoMiRespuesta();
        this.imagenCodigo=pre.getImagenCodigo();


    }
    
    public void mandar(BeanPregunta pre)
    {
        pre.setIdIncisoMiRespuesta(itemSeleccionados);
    }


    public void Calificar()
    {
        TreeSet<Integer> res=new TreeSet<Integer>();
        TreeSet<Integer> mires=new TreeSet<Integer>();

        Iterator a=itemSeleccionados.iterator();
        while(a.hasNext())
        {
            mires.add(Integer.parseInt(a.next().toString()));
        }

        Iterator a2=respuestaCorrecta.iterator();
        while(a2.hasNext())
        {
            res.add(Integer.parseInt(a2.next().toString()));
        }

        if(res.equals(mires))
        {
            pre.setAcierto(true);
         
        }
        else
        {
            pre.setAcierto(false);
            
        }
         System.out.println("Aciertos = "+res+"   "+mires+"--"+aciertos+"---"+erroneas);
    }


    public void Calificacion()
    {
        int suma=0;
        Iterator ite=preguntas.iterator();
        while(ite.hasNext())
        {
            BeanPregunta bp=(BeanPregunta)ite.next();

            if(bp.isAcierto()==true)
            {
                suma++;
            }
        }

        this.calificacion=((suma*100)/preguntas.size());


    }


    public List<SelectItem> getItemOpciones() {
        return itemOpciones;
    }

    public void setItemOpciones(List<SelectItem> itemOpciones) {
        this.itemOpciones = itemOpciones;
    }

    public List<String> getItemSeleccionados() {
        return itemSeleccionados;
    }

    public void setItemSeleccionados(List<String> itemSeleccionados) {
        this.itemSeleccionados = itemSeleccionados;
    }

    public String getTextoPregunta() {
        return textoPregunta;
    }

    public void setTextoPregunta(String textoPregunta) {
        this.textoPregunta = textoPregunta;
    }

 
    public String getFechaInicio() {
        return fechaInicio;
    }

    public void setFechaInicio(String fechaInicio) {
        this.fechaInicio = fechaInicio;
    }
    private String fechaTermino;

    public String getFechaTermino() {
        return fechaTermino;
    }

    public void setFechaTermino(String fechaTermino) {
        this.fechaTermino = fechaTermino;
    }

        public String getImagenCodigo() {
        return imagenCodigo;
    }

    public void setImagenCodigo(String imagenCodigo)
    {
        this.imagenCodigo = imagenCodigo;
    }

}
